package services.user;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import domain.entities.MiembroBms;
import domain.entities.MiembroBmsDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserServicesImpl implements UserServices{

    private MiembroBmsDAO miembroBmsDAO;

    @Autowired
    public UserServicesImpl(MiembroBmsDAO miembroBmsDAO){
        this.miembroBmsDAO = miembroBmsDAO;
    }

    @Override
    public MiembroBms authenticate(String email, String pass) {
        String md5Pass = null;
        try {
            md5Pass = getMD5(pass);
        } catch (NoSuchAlgorithmException e) {     }
        MiembroBms miembro = miembroBmsDAO.findByEmail(email);
       // if( miembro != null && md5Pass.equals(miembro.getPassword())){
            ValueStack stack = ActionContext.getContext().getValueStack();
            Map<String, MiembroBms> context = new HashMap<String, MiembroBms>();
            context.put("user", miembro);
            stack.push(context);
            return miembro;
        //}else{
        //    return null;
        //}
    }

    private String getMD5(String text) throws NoSuchAlgorithmException {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.reset();
        m.update(text.getBytes());
        byte[] digest = m.digest();
        BigInteger bigInt = new BigInteger(1,digest);
        String hashtext = bigInt.toString(16);
        while(hashtext.length() < 32 ){
            hashtext = "0"+hashtext;
        }
        return hashtext;
    }

    @Override
    public boolean existsSession() {
        return false;  //To change body of implemented methods use File | Settings | File Templates.
    }

    public List<MiembroBms> findAll(){
        return miembroBmsDAO.findAll();

    }

    public MiembroBms findByNameSurname(String name, String surname){
        return miembroBmsDAO.findByNameSurname(name,surname);

    }

    public List<MiembroBms> findByNameRoleId(String name){
        return miembroBmsDAO.findByNameRoleId(name);
    }

    public void save(MiembroBms miembroBms){
        miembroBmsDAO.attachDirty(miembroBms);
    }

    public void delete(MiembroBms miembroBms){
        miembroBmsDAO.delete(miembroBms);
    }

    public MiembroBms findById(Integer id){
        return miembroBmsDAO.findById(id);

    }
}
